package com.service.impl;

import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;

import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;

import com.dao.YonghuDao;
import com.entity.YonghuEntity;
import com.service.YonghuService;
import com.entity.vo.YonghuVO;
import com.entity.view.YonghuView;

/**
 * 用户服务实现类
 *
 * 该类提供了对用户（YonghuEntity）相关操作的实现，包括分页查询、视图数据获取等功能。
 * 使用了MyBatis-Plus的ServiceImpl进行数据库操作简化。
 *
 * @author team10
 */
@Service("yonghuService")
public class YonghuServiceImpl extends ServiceImpl<YonghuDao, YonghuEntity> implements YonghuService {

	/**
	 * 分页查询用户信息
	 *
	 * @param params 查询参数
	 * @return 返回分页查询结果
	 */
	@Override
	public PageUtils queryPage(Map<String, Object> params) {
		// 创建分页对象并执行分页查询
		Page<YonghuEntity> page = this.selectPage(
				new Query<YonghuEntity>(params).getPage(),
				new EntityWrapper<YonghuEntity>() // 使用EntityWrapper封装查询条件
		);
		// 返回封装后的分页结果
		return new PageUtils(page);
	}

	/**
	 * 带条件分页查询用户信息
	 *
	 * @param params 查询参数
	 * @param wrapper 查询条件封装
	 * @return 返回分页查询结果
	 */
	@Override
	public PageUtils queryPage(Map<String, Object> params, Wrapper<YonghuEntity> wrapper) {
		// 创建分页对象并执行分页查询
		Page<YonghuView> page = new Query<YonghuView>(params).getPage();
		// 设置查询结果
		page.setRecords(baseMapper.selectListView(page, wrapper));
		// 返回封装后的分页结果
		PageUtils pageUtil = new PageUtils(page);
		return pageUtil;
	}

	/**
	 * 根据条件查询用户视图对象列表
	 *
	 * @param wrapper 查询条件封装
	 * @return 返回用户视图对象列表
	 */
	@Override
	public List<YonghuVO> selectListVO(Wrapper<YonghuEntity> wrapper) {
		// 使用baseMapper执行自定义查询
		return baseMapper.selectListVO(wrapper);
	}

	/**
	 * 根据条件查询单个用户视图对象
	 *
	 * @param wrapper 查询条件封装
	 * @return 返回单个用户视图对象
	 */
	@Override
	public YonghuVO selectVO(Wrapper<YonghuEntity> wrapper) {
		return baseMapper.selectVO(wrapper);
	}

	/**
	 * 根据条件查询用户视图列表
	 *
	 * @param wrapper 查询条件封装
	 * @return 返回用户视图对象列表
	 */
	@Override
	public List<YonghuView> selectListView(Wrapper<YonghuEntity> wrapper) {
		return baseMapper.selectListView(wrapper);
	}

	/**
	 * 根据条件查询单个用户视图
	 *
	 * @param wrapper 查询条件封装
	 * @return 返回单个用户视图对象
	 */
	@Override
	public YonghuView selectView(Wrapper<YonghuEntity> wrapper) {
		return baseMapper.selectView(wrapper);
	}
}
